//1.考察pipe函数的使用， 以及对pipe函数参数的理解，同时考察对文件描述符的理解
// 2.要求：先创建管道， 进而创建子进程， 父子进程使用管道进行通信
// 父进程向管道当中写“i am father”， 
// 子进程从管道当中读出内容, 并且打印到标准输出
// 3.提交要求：提交代码截图， 提交代码执行之后的截图
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <string.h>
#include <sys/wait.h>

int main()
{
    //失败返回-1
    int fds[2];
    int n = pipe(fds);
    if(n < 0)
    {
        perror("pipe error\n");
    }
    //成功
    //创建子进程
    pid_t id = fork();
    if(id < 0)
    {
        perror("fork\n");
    }
    if(id == 0)
    {
        //child
        //父进程写，子进程读，输出
        close(fds[1]);
        char buffer[128];
        int n = read(fds[0],buffer,sizeof(buffer) - 1);
        buffer[n] = 0;
        printf("%s\n",buffer);
        return 0;
    }
    //father
    close(fds[0]);
    char message[] = "i am father";
    write(fds[1],message,strlen(message));

    pid_t ret = waitpid(id,NULL,0);
    return 0;
}